package server;

import java.util.Observable;
import java.util.Observer;

import client.SettingsClient;

import communication.ComCliSrv;

/**
 * Application Serveur (classe principale)
 * @author Julien Roch
 *
 */
public class ServerApplication implements Observer {

	/**
	 * Modele cote serveur
	 */
	public ServerInternals internals = null;
	private int noPort = SettingsClient.PORT;
	private ServerView vue;
	
	

	/**
	 * @param args arguments de la ligne de commande
	 */
	public static void main(String[] args) {
		new ServerApplication();		
	}
	/**
	 * Affiche la fenetre de connexion
	 */
	public ServerApplication(){
		vue = new ServerView(this);
		vue.setVisible(true);
	}
	/**
	 * Affiche la fenetre de connexion et lance le serveur 
	 * @param noPort
	 */
	public ServerApplication(int noPort){
		this();
		startServer(noPort);
	}
	
	void startServer(int port){
		noPort = port;
		System.out.println("Demarre le serveur sur le port " + noPort);
		vue.serverSettings.allowStart(false);
		NetServer netServer = new NetServer(noPort);
		netServer.addObserver(this);
		netServer.openServerSocket();
		this.internals = new ServerInternals(netServer,UserDatabase.getInstance("users.db"));
	}
	/**
	 * Obtient le numero de port
	 * @return le numero de port
	 */
	public int getNoPort(){
		return noPort;
	}
	
	@Override
	public void update(Observable o, Object arg) {
		if(ComCliSrv.class.isInstance(arg))
			((ComCliSrv)arg).handleServerInternals(this.internals);
	}

}
